package cn.outsourcing.supermarket.service;

import cn.outsourcing.supermarket.dto.AddCartDTO;
import cn.outsourcing.supermarket.dto.CartCheckedDTO;
import cn.outsourcing.supermarket.po.HiolabsCart;
import cn.outsourcing.supermarket.vo.AddCartVO;
import cn.outsourcing.supermarket.vo.PayCartVO;
import cn.outsourcing.supermarket.vo.hiolabs.HiolabsCartVO;
import cn.outsourcing.supermarket.vo.hiolabs.HiolabsOrderVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 购物车服务类
 *
 * @author gzkemays
 * @since 2021-10-20
 */
public interface HiolabsCartService extends IService<HiolabsCart> {
  /**
   * 根据token获取用户购物车的数量
   *
   * @param token 用户密钥
   * @return "goodsCount": 2
   */
  Map<String, Integer> getCartTotal();

  /**
   * 添加商品至购物车
   *
   * @param entity 添加时的入参对象
   * @param userId 从 token 中解析 user id
   * @return 购物车综合结果
   */
  AddCartVO add(AddCartDTO entity);

  /**
   * 更新购物车商品
   *
   * <p>其主要更新数量即可
   *
   * @param entity 添加时的入参对象
   * @return 购物车综合结果
   */
  AddCartVO updateByEntity(AddCartDTO entity);

  /**
   * 获取购物车基本信息
   *
   * @param userId 用户id
   * @return 购物车综合结果
   */
  AddCartVO index();

  /**
   * 提交订单
   *
   * @param cartIds 购物车 id
   */
  HiolabsOrderVO submitOrder(Set<Integer> cartIds,Boolean isIntegral,Integer channel);

  /**
   * 充值功能下单
   * @param balance
   * @return
   */
  HiolabsOrderVO submitOrderByBalance(BigDecimal balance);

  /**
   * 提交订单时对购物车进行检测，并返回数据。
   *
   * @param entity 入参数据
   * @return 检测数据结果
   */
  PayCartVO checkedCart(CartCheckedDTO entity);

  /**
   * 购物车删除商品
   *
   * @param productId 产品id
   * @return 购物车综合结果
   */
  AddCartVO deleteGoods(Integer productId);

  /**
   * 购物车商品被勾选
   *
   * @param entity 勾选结果
   * @return 购物车综合结果
   */
  AddCartVO checkedGoods(Map<String, Object> entity);

  /**
   * 获取用户订单商品
   *
   * @return 用户订单商品值列表
   */
  List<HiolabsCartVO> getOrderGoods();
}
